package com.hsc.offer;

import java.util.Stack;

/**
 * @author
 * @date 2025-06-13
 * @Description 6.把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。
 * 输入一个非减排序的数组的一个旋转，输出旋转数组的最小元素。
 * 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转，
 * 该数组的最小值为1。 NOTE：给出的所有元素都大于0，若数组大小为0，请返回0。
 */
public class OfferTest1 {


    public static void main(String[] args) {
        int[] array = {3, 4, 5, 1, 2};
        System.out.println(new OfferTest1().minNumberInRotateArray2(array));
    }

    /**
     * 笔试快速完成法
     * 循环找出最小值
     * @param array
     * @return
     */
    public int minNumberInRotateArray(int[] array) {
        // 若数组大小为0，请返回0。
        if (array.length == 0) {
            return 0;
        }
        // 循环找出最小值
        int min = array[0];
        for (int i = 0; i < array.length; i++) {
            if (array[i] < min) {
                min = array[i];
            }
        }
        return min;
    }

    /**
     * 面试的情况
     * 使用技巧找出最小值
     * 如果当前元素与后一个元素相减 小于0 则说明当前元素是最小值
     *
     * @param array
     * @return
     */
    public int minNumberInRotateArray2(int[] array) {
        if (array.length == 0) {
            return 0;
        }
        // 如果当前元素与后一个元素相减 小于0 则说明当前元素是最小值
        // {3, 4, 5, 1, 2};
        int min = 0;
        for (int i = 0; i < array.length - 1; i++) {
            if (array[i] - array[i + 1] > 0) {
                min = array[i + 1];
            }
        }
        return min;
    }
}
